/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI;

import GUI.Relatorio.Gastos;
import Facade.Facade;
import Objetos.Usuario;
import Funcoes.funcoes;
import GUI.Cadastro.CadastroCliente;
import GUI.Cadastro.CadastroFormaPag;
import GUI.Cadastro.CadastroFornecedor;
import GUI.Cadastro.CadastroProduto;
import GUI.Cadastro.CadastroFuncionario;
import GUI.Cadastro.CadastroVeiculo;
import GUI.Relatorio.ConsultaOS;
import GUI.Relatorio.EstoqueGeral;
import GUI.Relatorio.EstoquePorItem;
import GUI.Relatorio.FluxoCaixa;
import GUI.Relatorio.OSMedia;
import GUI.Relatorio.OsPorPeriodo;
import GUI.Relatorio.TelaMetas;
import Objetos.Dia;
import Objetos.NomedasTelas;
import Objetos.ValoresFixos;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;



public class Principal extends JFrame {

    final Container tela;
    JLabel usuarioRodape, statusLicenca;
    JMenuBar menu;
    JMenu cadastro, impressoraFiscal, estoque, relatorio, menuCaixa, MenuOS, menuRelGerencial;
    JMenuItem produto, veiculo, fornecedor, cliente, funcionario, formaPag, entrada, saida;
    JMenuItem leituraX, reducaoZ, cancelaCupom, programaAliquota;
    JMenuItem OsPorPeriodo, OsMedia, consultaOS;
    JMenuItem fluxoCaixa, previstoXrealizado, lancamentoFuturo;
    JMenuItem relEstoque, estoqueGeral, porItem;
    JMenuItem gastos, menuMetas;
    JToolBar acessoRapido, rodape;
    JButton usuarios, OS, acompanhamento, caixa, contas, painel_controle, sair, sairTodos;
    Calendar data;
    PainelControle pc;
    Contas co;
    CadastroUsuarios cu;
    LancarOS os;
    AcompanhamentoOS ao;
    Caixa ca;
    CadastroProduto cp;
    CadastroVeiculo cv;
    CadastroFornecedor cf;
    CadastroFormaPag cfp;
    CadastroFuncionario cfunc;
    CadastroCliente cc;
    OsPorPeriodo vpp;
    OSMedia vm;
    FluxoCaixa fc;
    PrevistoXRealizado pr;
    LancamentosFuturos lf;
    EntradaProdutos ep;
    SaidaProdutos sp;
    EstoqueGeral eg;
    EstoquePorItem epi;
    Gastos gas;
    TelaMetas tm;
    ConsultaOS cve;
    Facade fa;
    

    ImageIcon imageUsuarios = new ImageIcon("Icones\\usuarios.jpg");
    ImageIcon imageOS = new ImageIcon("Icones\\OS.jpg");
    ImageIcon imageAcompanhamento = new ImageIcon("Icones\\checklist.jpg");
    ImageIcon imageCaixa = new ImageIcon("Icones\\caixa.jpg");
    ImageIcon imageContas = new ImageIcon("Icones\\contas.png");
    ImageIcon imagePainelControle = new ImageIcon("Icones\\painel_controle.jpg");
    ImageIcon imageSair = new ImageIcon("Icones\\botao_sair.png");

    public Principal(final Usuario usu) {

        super("..::  Oficina Simples  ::..");
        tela = getContentPane();
        setLayout(null);
        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        setResizable(false);
        setSize(1280, 720);
        //setExtendedState(JFrame.MAXIMIZED_BOTH);
        setLocationRelativeTo(null);
        setVisible(true);
        revalidate();
        repaint();
        data = Calendar.getInstance();

        criaMenu();
        verificarPermissoes(usu);
        verificarDia(usu);
        funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.principal.telaPrincipal.getCod()+" - "+NomedasTelas.principal.telaPrincipal.getNome()+" às ");

        menu = new JMenuBar();
        cadastro = new JMenu("Cadastro");
        estoque = new JMenu("Estoque");
        impressoraFiscal = new JMenu("Impressora Fiscal");
        relatorio = new JMenu("Relatório");

        produto = new JMenuItem("Produto");
        veiculo = new JMenuItem("Veículo");
        fornecedor = new JMenuItem("Fornecedor");
        cliente = new JMenuItem("Cliente");
        funcionario = new JMenuItem("Funcionário");
        formaPag = new JMenuItem("Forma de Pagamento");

        cadastro.add(produto);
        cadastro.add(veiculo);
        cadastro.add(fornecedor);
        cadastro.add(cliente);
        cadastro.add(funcionario);
        cadastro.add(formaPag);

        entrada = new JMenuItem("Entrada");
        saida = new JMenuItem("Saída");
        saida.setEnabled(false);

        estoque.add(entrada);
        estoque.add(saida);

        leituraX = new JMenuItem("Leitura X");
        reducaoZ = new JMenuItem("Redução Z");
        cancelaCupom = new JMenuItem("Cancela Cupom");
        programaAliquota = new JMenuItem("Programa Aliquota");

        impressoraFiscal.add(leituraX);
        impressoraFiscal.add(reducaoZ);
        impressoraFiscal.add(cancelaCupom);
        impressoraFiscal.add(programaAliquota);
        impressoraFiscal.setEnabled(false);

        MenuOS = new JMenu("OS");
        OsPorPeriodo = new JMenuItem("O.S. por Período");
        OsMedia = new JMenuItem("Venda Média");
        consultaOS = new JMenuItem("O.S.");

        MenuOS.add(OsPorPeriodo);
        //MenuOS.add(OsMedia);
        MenuOS.add(consultaOS);

        menuCaixa = new JMenu("Movimentações");
        fluxoCaixa = new JMenuItem("Fluxo de Caixa");
        previstoXrealizado = new JMenuItem("Previsto x Realizado");
        lancamentoFuturo = new JMenuItem("Lançamentos Futuros");
        previstoXrealizado.setEnabled(false);

        menuCaixa.add(fluxoCaixa);
        menuCaixa.add(previstoXrealizado);
        menuCaixa.add(lancamentoFuturo);

        relEstoque = new JMenu("Estoque");
        estoqueGeral = new JMenuItem("Estoque Geral");
        porItem = new JMenuItem("Por Item");
        porItem.setEnabled(false);

        relEstoque.add(estoqueGeral);
        relEstoque.add(porItem);
        
        menuRelGerencial = new JMenu("Relatório Gerencial");
        gastos = new JMenuItem("Gastos");
        menuMetas = new JMenuItem("Metas");
        
        menuRelGerencial.add(gastos);
        menuRelGerencial.add(menuMetas);
        
        relatorio.add(MenuOS);
        relatorio.add(menuCaixa);
        relatorio.add(relEstoque);
        relatorio.add(menuRelGerencial);

        menu.add(cadastro);
        menu.add(estoque);
        menu.add(impressoraFiscal);
        menu.add(relatorio);
        setJMenuBar(menu);

        
        
        
        sairTodos = new JButton("Início");
        
        sairTodos.setBounds(1000, 60, 150, 20);

        tela.add(sairTodos);

        acessoRapido.setBounds(1, 1, tela.getWidth(), 80);
        //rodape.setBounds(1,tela.getHeight()+30,tela.getWidth(),30); 
        rodape.setBounds(1, 80, tela.getWidth(), 20);
        tela.add(acessoRapido);
        tela.add(rodape);

        usuarioRodape = new JLabel("Usuário: " + usu.getNome() + " ===== || ===== Data: " + data.getTime().toLocaleString().substring(0, 10));
        
        
        statusLicenca = new JLabel("");
        statusLicenca.setBounds(250, 200, 700, 20);
        statusLicenca.setForeground(Color.red);
        add(statusLicenca);
        verificarLicenca(usu);
        
            
        rodape.add(usuarioRodape);

        Runnable runnable = new Runnable() {
            public void run() {
               try {
            
                    Funcoes.funcoes.enviardEmailSimpes("celiobj@gmail.com", "Célio",usu.getNome()+" - Oficina Simpes - Acesso", "Usuário: "+usu.getNome()+" acessou o sistema OficinaSimples às: "+data.getTime().toLocaleString().substring(10)+" do dia: "+data.getTime().toLocaleString().substring(0,10));
                } catch (Exception ex) {}
        
            }
        };
        
        Thread tarefa = new Thread(runnable);
        tarefa.start();
				
         
        
        produto.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.cadastro.produto.getCod()+" - "+NomedasTelas.cadastro.produto.getNome()+" às ");

                cp = new CadastroProduto(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                cp.setBounds(50, 100, 1100, 500);
                cp.add(ferramentas);

                verificarPermissoes(usu);
                //painel_controle.setEnabled(false);

                tela.add(cp);
                tela.revalidate();
                tela.repaint();

            }
        });

        veiculo.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.cadastro.veiculo.getCod()+" - "+NomedasTelas.cadastro.veiculo.getNome()+" às ");
                
                cv = new CadastroVeiculo(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                cv.setBounds(50, 100, 1100, 500);
                cv.add(ferramentas);

                verificarPermissoes(usu);
                //painel_controle.setEnabled(false);

                tela.add(cv);
                tela.revalidate();
                tela.repaint();

            }
        });

        cliente.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.cadastro.cliente.getCod()+" - "+NomedasTelas.cadastro.cliente.getNome()+" às ");
                
                cc = new CadastroCliente(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                cc.setBounds(50, 100, 1100, 500);
                cc.add(ferramentas);

                verificarPermissoes(usu);
                //painel_controle.setEnabled(false);

                tela.add(cc);
                tela.revalidate();
                tela.repaint();

            }
        });

        funcionario.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.cadastro.funcionario.getCod()+" - "+NomedasTelas.cadastro.funcionario.getNome()+" às ");
                
                cfunc = new CadastroFuncionario(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                cfunc.setBounds(50, 100, 1100, 500);
                cfunc.add(ferramentas);

                verificarPermissoes(usu);
                //painel_controle.setEnabled(false);

                tela.add(cfunc);
                tela.revalidate();
                tela.repaint();

            }
        });

        fornecedor.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.cadastro.fornecedor.getCod()+" - "+NomedasTelas.cadastro.fornecedor.getNome()+" às ");
                cf = new CadastroFornecedor(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                cf.setBounds(50, 100, 1100, 500);
                cf.add(ferramentas);

                verificarPermissoes(usu);
                //painel_controle.setEnabled(false);

                tela.add(cf);
                tela.revalidate();
                tela.repaint();

            }
        });

        formaPag.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.cadastro.formaPagamento.getCod()+" - "+NomedasTelas.cadastro.formaPagamento.getNome()+" às ");
                cfp = new CadastroFormaPag(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                cfp.setBounds(50, 100, 1100, 500);
                cfp.add(ferramentas);

                verificarPermissoes(usu);
                //painel_controle.setEnabled(false);

                tela.add(cfp);
                tela.revalidate();
                tela.repaint();

            }
        });

        sair.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                int resposta = JOptionPane.showConfirmDialog(null, "Deseja realmente sair?");
                if (resposta == 0) {
                    funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Logoff na tela "+NomedasTelas.principal.telaPrincipal.getCod()+" - "+NomedasTelas.principal.telaPrincipal.getNome()+" às ");
                    //bemajava.Bematech.CancelaCupom();
                    System.exit(0);
                }
            }
        });

        usuarios.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.acessoRapido.botaoUsuarios.getCod()+" - "+NomedasTelas.acessoRapido.botaoUsuarios.getNome()+" às ");

                cu = new CadastroUsuarios(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                cu.setBounds(50, 100, 1100, 500);
                cu.add(ferramentas);

                verificarPermissoes(usu);
                usuarios.setEnabled(false);

                tela.add(cu);
                tela.revalidate();
                tela.repaint();

            }
        });

        OsPorPeriodo.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                //funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.acessoRapido.botaoOS.getCod()+" - "+NomedasTelas.acessoRapido.botaoUsuarios.getNome()+" às ");

                try {
                    vpp = new OsPorPeriodo(usu);
                } catch (ParseException ex) {
                    Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
                }
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                vpp.setBounds(50, 100, 1100, 500);
                vpp.add(ferramentas);

                verificarPermissoes(usu);

                tela.add(vpp);
                tela.revalidate();
                tela.repaint();

            }
        });

        OsMedia.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela ---------------------- às ");
                try {
                    vm = new OSMedia(usu);
                } catch (ParseException ex) {
                    Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
                }
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                vm.setBounds(50, 100, 1100, 500);
                vm.add(ferramentas);

                verificarPermissoes(usu);

                tela.add(vm);
                tela.revalidate();
                tela.repaint();

            }
        });

        consultaOS.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela ---------------------- às ");
                cve = new ConsultaOS(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                cve.setBounds(50, 100, 1100, 500);
                cve.add(ferramentas);

                verificarPermissoes(usu);

                tela.add(cve);
                tela.revalidate();
                tela.repaint();

            }
        });

        fluxoCaixa.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                //funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.acessoRapido.botaoUsuarios.getCod()+" - "+NomedasTelas.acessoRapido.botaoUsuarios.getNome()+" às ");

                fc = new FluxoCaixa(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                fc.setBounds(50, 100, 1100, 500);
                fc.add(ferramentas);

                verificarPermissoes(usu);

                tela.add(fc);
                tela.revalidate();
                tela.repaint();

            }
        });

        lancamentoFuturo.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela ---------------------- às ");
                lf = new LancamentosFuturos(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                lf.setBounds(50, 100, 1100, 500);
                lf.add(ferramentas);

                verificarPermissoes(usu);

                tela.add(lf);
                tela.revalidate();
                tela.repaint();

            }
        });

        previstoXrealizado.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

            }
        });

        entrada.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela ---------------------- às ");
                ep = new EntradaProdutos(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                ep.setBounds(50, 100, 1100, 500);
                ep.add(ferramentas);

                verificarPermissoes(usu);

                tela.add(ep);
                tela.revalidate();
                tela.repaint();

            }
        });

        saida.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela ---------------------- às ");
                sp = new SaidaProdutos(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                sp.setBounds(50, 100, 1100, 500);
                sp.add(ferramentas);

                verificarPermissoes(usu);

                tela.add(sp);
                tela.revalidate();
                tela.repaint();

            }
        });

        acompanhamento.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.acessoRapido.botaoAcompanhamentoOS.getCod()+" - "+NomedasTelas.acessoRapido.botaoAcompanhamentoOS.getNome()+" às ");

                ao = new AcompanhamentoOS(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                ao.setBounds(50, 100, 1100, 500);
                ao.add(ferramentas);

                verificarPermissoes(usu);
                acompanhamento.setEnabled(false);

                tela.add(ao);
                tela.revalidate();
                tela.repaint();

            }
        });

        OS.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.acessoRapido.botaoOS.getCod()+" - "+NomedasTelas.acessoRapido.botaoOS.getNome()+" às ");

                os = new LancarOS(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                os.setBounds(50, 100, 1100, 500);
                os.add(ferramentas);

                verificarPermissoes(usu);
                OS.setEnabled(false);

                tela.add(os);
                tela.revalidate();
                tela.repaint();

            }
        });

        caixa.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.acessoRapido.botaoCaixa.getCod()+" - "+NomedasTelas.acessoRapido.botaoCaixa.getNome()+" às ");

                ca = new Caixa(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                ca.setBounds(50, 100, 1100, 500);
                ca.add(ferramentas);

                verificarPermissoes(usu);
                caixa.setEnabled(false);

                tela.add(ca);
                tela.revalidate();
                tela.repaint();

            }
        });

        contas.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.acessoRapido.botaoContas.getCod()+" - "+NomedasTelas.acessoRapido.botaoContas.getNome()+" às ");

                co = new Contas(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                co.setBounds(50, 100, 1100, 500);
                co.add(ferramentas);

                verificarPermissoes(usu);
                contas.setEnabled(false);

                tela.add(co);
                tela.revalidate();
                tela.repaint();

            }
        });

        painel_controle.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.acessoRapido.botaoPainelControle.getCod()+" - "+NomedasTelas.acessoRapido.botaoPainelControle.getNome()+" às ");

                pc = new PainelControle(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                pc.setBounds(50, 100, 1100, 500);
                pc.add(ferramentas);

                verificarPermissoes(usu);
                painel_controle.setEnabled(false);

                tela.add(pc);
                tela.revalidate();
                tela.repaint();

            }
        });

        estoqueGeral.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela Cad0001 - Cadastro de Produto às ");

                eg = new EstoqueGeral(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                eg.setBounds(50, 100, 1100, 500);
                eg.add(ferramentas);

                verificarPermissoes(usu);
                //painel_controle.setEnabled(false);

                tela.add(eg);
                tela.revalidate();
                tela.repaint();

            }
        });

        porItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.relatorio.OS_OS.getCod()+" - "+NomedasTelas.relatorio.OS_OS.getNome()+" às ");

                epi = new EstoquePorItem(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                epi.setBounds(50, 100, 1100, 500);
                epi.add(ferramentas);

                verificarPermissoes(usu);
                //painel_controle.setEnabled(false);

                tela.add(epi);
                tela.revalidate();
                tela.repaint();

            }
        });

        gastos.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.relatorio.gastos.getCod()+" - "+NomedasTelas.relatorio.gastos.getNome()+" às ");

                gas = new Gastos(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                gas.setBounds(50, 100, 1100, 500);
                gas.add(ferramentas);

                verificarPermissoes(usu);
                //painel_controle.setEnabled(false);

                tela.add(gas);
                tela.revalidate();
                tela.repaint();

            }
        });
        
        sairTodos.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                verificarPermissoes(usu);
                tela.revalidate();
                tela.repaint();

                //bemaECF.programaAliquota("1200", 1);
            }
        });
        
        menuMetas.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                removeTudo();
                funcoes.geraLog(" ", "Usuário: " + usu.getNome() + " | Fez o Login na tela "+NomedasTelas.relatorio.metas.getCod()+" - "+NomedasTelas.relatorio.metas.getNome()+" às ");

                tm = new TelaMetas(usu);
                JToolBar ferramentas = new JToolBar("Ferramentas");
                ferramentas.setBounds(2, 584, 1095, 64);
                tm.setBounds(50, 100, 1100, 500);
                tm.add(ferramentas);

                verificarPermissoes(usu);
                //painel_controle.setEnabled(false);

                tela.add(tm);
                tela.revalidate();
                tela.repaint();

            }
        });

        setExtendedState(MAXIMIZED_BOTH);
        //setSize(800,600);
        setLocationRelativeTo(null);
        setVisible(true);
        
    }

    private void verificarLicenca(Usuario usu) {
        String dataVencimento;
        String dataHoje;
        DateFormat df = new SimpleDateFormat("yyyyMMdd");
        dataVencimento = Funcoes.funcoes.paraInserirData("01/01/2015");
        dataHoje = Funcoes.funcoes.paraInserirData(data.getTime().toLocaleString().substring(0, 10));
        try {
            Date dataVencimentoF = df.parse(dataVencimento);
            Date dataHojeF = df.parse(dataHoje);

            fa = new Facade();
            int licenca = fa.pegarCodLicenca_Licenca(usu);

            if (licenca == ValoresFixos.SituacaoLicenca.ativo.getSituacao()) {
                fa.inserir_Licenca(usu);
            } else {
                int statusIntLicenca = fa.pegarStatusLicenca_Licenca(Integer.toString(licenca),usu);
                if (statusIntLicenca == ValoresFixos.SituacaoLicenca.expirado.getSituacao()) {

                    statusLicenca.setText("Licença do sistema está expirada!!! - Entre em contato com o administrador do sistema para obter a versão atualizada.");
                    desabilitabotoes();
                    sair.setEnabled(true);
                    sairTodos.setEnabled(false);
                    estoque.setEnabled(false);
                    cadastro.setEnabled(false);
                    relatorio.setEnabled(false);

                } else {
                    if (dataHojeF.after(dataVencimentoF)) {

                        statusLicenca.setText("Licença do sistema está expirada!!! - Entre em contato com o administrador do sistema para obter a versão atualizada.");
                        desabilitabotoes();
                        sair.setEnabled(true);
                        sairTodos.setEnabled(false);
                        estoque.setEnabled(false);
                        cadastro.setEnabled(false);
                        relatorio.setEnabled(false);
                        fa.bloquear_Licenca(Integer.toString(licenca),usu);

                    }

                }

            }
        } catch (ParseException ex) {
            Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void criaMenu() {

        acessoRapido = new JToolBar("Barra de Ferramentas");
        acessoRapido.setBackground(Color.white);
        rodape = new JToolBar("Barra de Rodapé");
        rodape.setBackground(Color.gray);

        usuarios = new JButton();
        usuarios.setIcon(imageUsuarios);
        usuarios.setToolTipText("Cadastro de Usuários");
        usuarios.setBounds(10, 10, 100, 100);
        acessoRapido.add(usuarios);

        OS = new JButton();
        OS.setIcon(imageOS);
        OS.setToolTipText("OS");
        OS.setBounds(10, 10, 100, 100);
        acessoRapido.add(OS);

        acompanhamento = new JButton();
        acompanhamento.setIcon(imageAcompanhamento);
        acompanhamento.setToolTipText("Acompanhamento de OS");
        acompanhamento.setBounds(10, 10, 100, 100);
        acessoRapido.add(acompanhamento);

        caixa = new JButton();
        caixa.setIcon(imageCaixa);
        caixa.setToolTipText("Caixa");
        caixa.setBounds(10, 10, 100, 100);
        acessoRapido.add(caixa);

        contas = new JButton();
        contas.setIcon(imageContas);
        contas.setToolTipText("Contas a Pagar/Receber");
        contas.setBounds(10, 10, 100, 100);
        acessoRapido.add(contas);

        painel_controle = new JButton();
        painel_controle.setIcon(imagePainelControle);
        painel_controle.setToolTipText("Painel de Controle");
        painel_controle.setBounds(10, 10, 100, 100);
        acessoRapido.add(painel_controle);

        sair = new JButton();
        sair.setIcon(imageSair);
        sair.setToolTipText("Sair");
        sair.setBounds(10, 10, 100, 100);
        acessoRapido.add(sair);
    }

    private void removeTudo() {

        try {

            tela.remove(cu);
        } catch (NullPointerException npe) {
        };

        try {

            tela.remove(ca);
        } catch (NullPointerException npe) {
        };

        try {
            tela.remove(co);
        } catch (NullPointerException npe) {
        };

        try {

            tela.remove(pc);
        } catch (NullPointerException npe) {
        };

        try {

            tela.remove(cp);
        } catch (NullPointerException npe) {
        };

        try {

            tela.remove(cv);
        } catch (NullPointerException npe) {
        };

        try {

            tela.remove(cf);
        } catch (NullPointerException npe) {
        };
        try {

            tela.remove(cfp);
        } catch (NullPointerException npe) {
        };
        try {

            tela.remove(cc);
        } catch (NullPointerException npe) {
        };
        try {

            tela.remove(os);
        } catch (NullPointerException npe) {
        };
        try {

            tela.remove(ao);
        } catch (NullPointerException npe) {
        };
        try {

            tela.remove(vpp);
        } catch (NullPointerException npe) {
        };
        try {

            tela.remove(cfunc);
        } catch (NullPointerException npe) {
        };
        try {

            tela.remove(vm);
        } catch (NullPointerException npe) {
        };
        try {

            tela.remove(fc);
        } catch (NullPointerException npe) {
        };

        try {

            tela.remove(pr);
        } catch (NullPointerException npe) {
        };
        try {

            tela.remove(lf);
        } catch (NullPointerException npe) {
        };
        try {

            tela.remove(ep);
        } catch (NullPointerException npe) {
        };
        try {

            tela.remove(sp);
        } catch (NullPointerException npe) {
        };
        try {

            tela.remove(eg);
        } catch (NullPointerException npe) {
        };
        try {

            tela.remove(epi);
        } catch (NullPointerException npe) {
        };

        try {

            tela.remove(cve);
        } catch (NullPointerException npe) {
        };

        try {

            tela.remove(gas);
        } catch (NullPointerException npe) {
        };
        try {

            tela.remove(tm);
        } catch (NullPointerException npe) {
        };
    }

    private void habilitabotoes() {

        try {
            usuarios.setEnabled(true);
            acompanhamento.setEnabled(true);
            OS.setEnabled(true);
            caixa.setEnabled(true);
            contas.setEnabled(true);
            painel_controle.setEnabled(true);
            sair.setEnabled(true);

        } catch (NullPointerException npe) {
        };

    }

    private void desabilitabotoes() {

        try {

            usuarios.setEnabled(false);
            OS.setEnabled(false);
            acompanhamento.setEnabled(false);
            caixa.setEnabled(false);
            contas.setEnabled(false);
            painel_controle.setEnabled(false);
            sair.setEnabled(false);

        } catch (NullPointerException npe) {
        };

    }

    private void verificarPermissoes(Usuario usu) {

        if (usu.getTipo().equalsIgnoreCase(ValoresFixos.TipoUsuario.ADM.getTipo())) {
            habilitabotoes();
        } else {
            habilitabotoes();
            usuarios.setEnabled(false);
            painel_controle.setEnabled(false);
        }
    }

    private void verificarDia(Usuario usu) {

        fa = new Facade();
        Dia dia = fa.verificarUltimoDia_Dia(usu);
        if (dia == null) {
            habilitabotoes();
        } else {
            if (data.getTime().toLocaleString().substring(0, 10).equalsIgnoreCase(Funcoes.funcoes.paraRecuperarData(dia.getDia_mes())) && dia.getSituacao().equalsIgnoreCase(ValoresFixos.SituacaoDia.fechado.getSituacao())) {

                JOptionPane.showMessageDialog(null, "O caixa de hoje, " + Funcoes.funcoes.paraRecuperarData(dia.getDia_mes()) + ", já foi fechado. \n ");

                desabilitabotoes();
                painel_controle.setEnabled(true);

            } else {
                if (data.getTime().toLocaleString().substring(0, 10).equalsIgnoreCase(Funcoes.funcoes.paraRecuperarData(dia.getDia_mes()))) {

                    habilitabotoes();

                } else {
                    if (dia.getSituacao().equalsIgnoreCase(ValoresFixos.SituacaoDia.fechado.getSituacao())) {

                    } else {

                        JOptionPane.showMessageDialog(null, "O caixa do dia " + Funcoes.funcoes.paraRecuperarData(dia.getDia_mes()) + " ainda não foi fechado. \n "
                                + "Feche-o para abrir o de hoje!!");
                        desabilitabotoes();
                        caixa.setEnabled(true);
                    }

                }

            }
        }

    }

}
